package edu.gdkm.extendsdemo;

public class Test2 {
    public static void main(String[] args) {
        Person p1 = new Teacher();              //等号左边是父类的引用 ，右边使用new调用子类的构造方法实例化
        Person p2 = new Student();              //向上转型，向上转型可以自动进行，就像简单类型中的 int会自动转成double一样
        Person p3= new Staff();
        Person p4 = new Security();


        IdentityConfirm identityConfirm = new IdentityConfirm();
        identityConfirm.confirm(p1);
        identityConfirm.confirm(p2);
        identityConfirm.confirm(p3);
        identityConfirm.confirm(p4);

        double a=1.1;
        int b=(int)a;     //大转小，通过强制转换,但是会丢失精度
        System.out.println("b="+b);
        //向下转型，也需要强制转换 ，但是不是所有的对象都能强制转换，比如以下写法，编译不会报错，但是运行就出错了。
        //Student s = (Student) new Person();
        //对象向下转型，强制转换正常运行的前提是它本身就是这个子类的对象,比如以下代码中p本身就是一个student，所以可以强制转换为student
        Person p = new Student();
        Student s = (Student) p;
    }
}
